首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 實現子字符串位置互換的高效算法

     編輯:PHP 綜合知識

問題描述

給定字符串 $str 和兩個子串 $str1、$str2,將字符串中 $str1 和 $str2 的首次出現位置互換。

核心算法

function str_swap($str, $str1, $str2) {
    $len1 = strlen($str1);
    $len2 = strlen($str2);
    
    // 定位第一個子串
    $pos1 = strpos($str, $str1);
    if ($pos1 === false) return $str; // 未找到直接返回
    
    // 先替換 str1 為 str2
    $str = substr_replace($str, $str2, $pos1, $len1);
    
    // 在原 str1 位置之後查找 str2(避免誤匹配剛替換的內容)
    $pos2 = strpos($str, $str2, $pos1 + $len1);
    if ($pos2 === false) return $str;
    
    // 替換 str2 為 str1
    return substr_replace($str, $str1, $pos2, $len2);
}

執行示例

$str  = "This is an example, you see Tom tell Jack something";
$str1 = "Tom";
$str2 = "Jack";

echo str_swap($str, $str1, $str2);
// 輸出:This is an example, you see Jack tell Tom something

算法分析

步驟操作關鍵點
1strpos($str, $str1)獲取首次出現位置
2substr_replace($str, $str2, $pos1, $len1)原位置替換,長度精確
3strpos($str, $str2, $pos1 + $len1)偏移量關鍵:跳過剛替換的區域,定位原 str2
4substr_replace($str, $str1, $pos2, $len2)完成互換

邊界情況處理

  • 子串不存在:返回原字符串
  • 子串重疊/包含:算法假設無重疊,複雜場景需正則
  • 多次出現:僅互換首次出現,如需全部替換可循環調用
  • 大小寫敏感:strpos 區分大小寫,需不敏感用 stripos

代碼格式化工具推薦

為提升代碼可讀性,推薦使用在線格式化工具:

相關專題延伸

更多字符串操作技巧請參考《php字符串(string)用法總結》、《php正則表達式用法總結》等專題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved