PHP版 判断两个字符串为互换词语

原创 2015年11月20日 12:21:16

指定两个字符串,通过程序的判断两个字符串是否互为变型词。

    $str = 'abcd';
    $compare_str = 'cdab';
    compare_func($str,$compare_str); //此时返回true
    //或
    $str = '123a';
    $str = '123';
    compare_func($str,$compare_str); //此时返回false

解题思路:

  • 如果两个字串是互为变型词,那么字串长度是一致的。

  • 遍历第一个字串的每个字符获取其Ascii做下标,统计出现次数,存入Ascii数组。再遍历第二个字串中每个字符的Ascii做下标,直接从Ascii数组中减去出现次数即可。

function compare_func($str,$compare_str)
{
    $strl = strlen($str);
    $compare_strl = strlen($compare_str);
    // 若两个字串的长度等于零或不一致返回false
    if ($strl + $compare_strl === 0 || $strl !== $compare_strl)
        return false;
    // 存储出现过的字符
    $ascii = [];
    for ($i = 0;$i < $strl;$i++) {
        // 以每个字符的Ascii码作为下标
        $ascii[ord($str[$i])] ++;
    }
    for ($i = 0;$i < $strl;$i++) {
        // 这里如果已经等于零了,再自减必然为负数,那么直接返回false
        if ( $ascii[ord($compare_str[$i])] -- == 0 ){
            return false;
        }
    }
    return true;
}

本文参考 “程序员代码面试指南-左程云” 一书改写和分享

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

【字符串】判断两字符串是否互为旋转词?

相关阅读:字符串逆序问题的解决方法题目:如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。比如A=”12345”,A的旋转词有”12345”,”23451”,”34512...

判断两个字符串是否互为变形词

package com.lyf.String;/** * Created by fangjiejie on 2017/5/13. */ public class IsDeformation { ...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

判断两个字符串是否互为变位词

题目:     Write a method to decide if two strings are anagrams or not.     翻译:     写一个方法来判断两个...

CTCI系列--1.3 判断两个字符串是否互为变换(C语言)

题目:Given two strings,write a method to decide if one is a permutation of the other. 对于给定的两个字符串,...

cci-Q1.4 判断两个字符串是否为变位词

原文: Write a method to decide if two strings are anagrams or not. 译文: 写一个函数判断两个字符串是否是变位词。 ...

判定两个字符串是否互为旋转词

在《程序员代码面试指南》中,提到了判定两个字符串是否互为旋转词的问题 问题的描述为:如果一个字符串str,把字符串str前面任意的部分挪到后面形成的字符串叫做str的旋转词,比如 str= “123...

判断两个字符串是否为兄弟字符串

①所谓兄弟字符串,就是指两个字符串中相同的字符串出现的个数相同。通常我们要判断两个字符串是否为兄弟字符串。 实现算法: //judge two string is brother string...

5.1判断两个字符串是否互为变形词(输入流)

【题目】    给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样且每种字符出现的次数也一样,那么str1和str2互为变形词。请实现函数判断两个字符串是否互为变形词。 ...

[编程之美-09]判断两个字符串是否互为变形词

[版权说明] 编程之美系列算法题集参考: 左程云 著《程序员代码面试指南IT名企算法与数据结构题目最优解》 July 著《编程之法面试和算法心得》 何海涛 著《剑指offer》 微软编程之美...

5.4 判断两个字符串是否互为旋转词(find函数)

【题目】     对字符串的旋转操作描述如下:      例如: str = "123456" str的所有旋转词为:"123456","234561","345612&qu...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)